package peace.htmllooker.node.form
{
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.text.StyleSheet;

import peace.htmllooker.Box;
import peace.htmllooker.Browser;
import peace.htmllooker.Node;
import peace.htmllooker.VerticalHtmlBox;

import peace.gui.layout.Container;
/**
 * 
 */
public class Form extends VerticalHtmlBox
{
	/**
	 * хеш радиогрупп по id  
	 */	
	public var radiogroups:Object = {};
	/**
	 * 
	 */
	protected var action:String;
	/**
	 * 
	 */
	protected var method:String = URLRequestMethod.GET;
	/**
	 * 
	 * @param xml
	 * @param css
	 * 
	 */
	public function Form(xml:XML, css:StyleSheet)
	{
		super(xml, css);
	}
	
	override protected function init (xml:XML, css:StyleSheet):void
	{
		if (xml.@action != undefined) action = xml.@action;
		if (xml.@method != undefined) method = xml.@method;

		super.init(xml, css);
	}
	/**
	 * Отправляем запрос на сервер 
	 * 
	 */	
	public function submit():void
	{
		var b:Browser = browser;
		// работаем только с браузером
		// ибо по запросу обычно ждем ответ
		if (!b) return;
		
		var r:URLRequest = new URLRequest();
		var v:URLVariables = new URLVariables();
		
		r.method = method;
		r.url = action.charAt(0)=="/" ? b.url.substring(0, b.url.indexOf("/",10)) + action : action;
		
		// перебираем детей на предмет значений
		readChildrenValues (this, v);
		
		r.data = v;
		
		b.request = r;
	}
	/**
	 * Рекурсивный поиск и чтение полей формы 
	 * 
	 * @param box
	 * @param v
	 * 
	 */	
	protected function readChildrenValues (box:Box, v:URLVariables):void
	{
		var node:Node;
		var field:FormField;
		var value:String;
		for each (node in Container(box.content).children)
		{
			if (node is Box)
			{
				readChildrenValues(Box(node), v);
			}
			else if (node is FormField)
			{
				field = FormField(node);
				// если есть информативное значение, нужно слать
				value = field.value;
				if (value)
				{
					v[field.id] = value;
				}
			}
		}
	}
	
}
}